package cn.demomaster.quickdb_compiler;

public class GetterSetterGenerator {

    /**
     * 根据字段名和字段类型生成get和set方法。
     *
     * @param fieldName 字段名
     * @param fieldType 字段类型
     * @return 包含get和set方法定义的字符串
     */
    public static String generateGettersAndSetters(String fieldName, String fieldType) {
        // 将字段名的第一个字母转换为大写，用于构造get/set方法名
        String capitalizedName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);

        StringBuilder getter = new StringBuilder();
        StringBuilder setter = new StringBuilder();

        if ("boolean".equals(fieldType) || "java.lang.Boolean".equals(fieldType)) {
            // 对于布尔类型，getter方法使用"is"前缀
            getter.append("public ").append(fieldType).append(" is").append(capitalizedName).append("() {\n");
        } else {
            getter.append("public ").append(fieldType).append(" get").append(capitalizedName).append("() {\n");
        }
        getter.append("    return this.").append(fieldName).append(";\n");
        getter.append("}\n\n");

        setter.append("public void set").append(capitalizedName).append("(").append(fieldType).append(" ").append(fieldName).append(") {\n");
        setter.append("    this.").append(fieldName).append(" = ").append(fieldName).append(";\n");
        setter.append("}");

        // 返回组合后的get和set方法定义
        return getter.toString() + setter.toString();
    }

    public static String generateGettersName(String fieldName, String fieldType) {
        // 将字段名的第一个字母转换为大写，用于构造get/set方法名
        String capitalizedName = capitalize(fieldName, fieldType);
        StringBuilder getter = new StringBuilder();
        if ("boolean".equals(fieldType) || "java.lang.Boolean".equals(fieldType)) {
            // 对于布尔类型，getter方法使用"is"前缀
            // 如果布尔类型的字段名以"is"开头，则直接使用字段名为getter方法名
            if (fieldName.startsWith("is") && fieldName.length() > 2 && Character.isUpperCase(fieldName.charAt(2))) {
                getter.append(fieldName);
            } else {
                // 对于其他布尔类型，getter方法使用"is"前缀
                getter.append("is").append(capitalizedName);
            }
        } else {
            getter.append("get").append(capitalizedName);
        }

        return getter.toString();
    }

    //首字母大写
    public static String capitalize(String fieldName, String fieldType) {
        if (fieldName == null || fieldName.isEmpty()) {
            return fieldName;
        }
        if ("boolean".equals(fieldType) || "java.lang.Boolean".equals(fieldType)) {
            if (fieldName.startsWith("is") && fieldName.length() > 2) {
                fieldName = fieldName.substring(2);
            }
        }
        return fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
    }

    public static void main(String[] args) {
        // 测试generateGettersAndSetters方法
        System.out.println(generateGettersAndSetters("favourite", "boolean"));
        System.out.println(generateGettersAndSetters("name", "String"));
    }
}